<?xml version="1.0" encoding="utf-8" ?>
<!--
スペスペたいむの書き方の説明
(c) anoyetta, 2018-2019

変更履歴はファイル末尾に。
-->
@{ var rev = "rev28"; }

<!-- ●●この辺は Razor構文（非常に高度な機能）の説明なので読み飛ばして良い●● ↓ここから -->
@{
  // データモデルを取得する
  var data = Model;
}
@{
  var sign = "anoyetta";

  /*
  Razor 構文
  Razor 構文を使用できます。

  Razor の構文リファレンス - MSDN
  https://docs.microsoft.com/ja-jp/aspnet/core/mvc/views/razor

  テキストエディタで編集する際にシンタックスハイライトを使用しやすいように拡張子をcshtmlにしています。
  しかし、RazorEngine によるパースはは定義ファイルの拡張子を問わず実施しています。
  したがって、従来どおりの xml 拡張子でも RazorEngine によるパースは作用します。

  Razor のパーサには、定義ファイルのロード時点の情報をデータモデルとして渡しています。
  データモデルの内容は下記のダンプを参考にしてください。
  */
}

<!--
  Razor への引数として渡しているモデルのダンプ

  LT     : @(data.LT)
  ET     : @(data.ET)
  Zone   : @(data.Zone)
  ZoneID : @(data.ZoneID)
  Locale : @(data.Locale)

  Player.Number : @(data.Player.Number)
  Player.Name   : @(data.Player.Name)
  Player.Job    : @(data.Player.Job)
  Player.Role   : @(data.Player.Role)

  Party :
    Party[0].Number : @(data.Party[0].Number)
    Party[0].Name   : @(data.Party[0].Name)
    Party[0].Job    : @(data.Party[0].Job)
    Party[0].Role   : @(data.Party[0].Role)

    Party[1].Number : @(data.Party[1].Number)
    Party[1].Name   : @(data.Party[1].Name)
    Party[1].Job    : @(data.Party[1].Job)
    Party[1].Role   : @(data.Party[1].Role)

    Party[2].Number : @(data.Party[2].Number)
    Party[2].Name   : @(data.Party[2].Name)
    Party[2].Job    : @(data.Party[2].Job)
    Party[2].Role   : @(data.Party[2].Role)

    Party[3].Number : @(data.Party[3].Number)
    Party[3].Name   : @(data.Party[3].Name)
    Party[3].Job    : @(data.Party[3].Job)
    Party[3].Role   : @(data.Party[3].Role)

    Party[4...8] more...

  Locale :
    FFXIV Game Locale
    JA, EN, FR, DE, KO

  Job  : PLD, WAR, DRK, WHM, SCH, AST...
  Role : Tank, Healer, MeleeDPS, RangeDPS, MagicDPS, Crafter, Gatherer

  * Zone の判定
    if (Model.Zone == "Sigmascape")
    if (Model.ZoneID == 123)
    と通常の条件式を使用してもよいが判定用のメソッドも提供されている。

    bool Model.InZone(param string[] zones)
    現在のゾーンが引数で与えられたゾーンのリストのいずれかに該当するかを返す。
    大文字/小文字は識別しない。現在のゾーン名に引数のゾーン名が含まれるとき、真を返す。

    bool Model.InZone(param int[] zoneIDs)
    現在のゾーンが引数で与えられたゾーンIDのリストのいずれかに該当するかを返す。

  * Job の判定
    Zone と同様に専用の判定メソッドが提供されている。

    bool Model.Player.InJob(param string[] jobs)
    プレイヤーのジョブが引数で与えられたジョブのリストのいずれかに該当するかを返す。
    大文字/小文字は識別しない。現在のジョブに引数のジョブが含まれるとき、真を返す。

    例)
    if (Model.Player.InJob("PLD", "WAR", "DRK")) {
        do something...
    }

  * Role の判定
    Zone と同様に専用の判定メソッドが提供されている。

    bool Model.Player.InRole(param string[] jobs)
    プレイヤーのロールが引数で与えられたロールのリストのいずれかに該当するかを返す。
    大文字/小文字は識別しない。現在のロールに引数のロールが含まれるとき、真を返す。

    例)
    if (Model.Player.InRole("Tank")) {
        do something...
    }

    if (Model.Player.InRole("Healer")) {
        do something...
    }

    if (Model.Player.InRole("DPS")) {
        do something...
    }

    if (Model.Player.InRole("MeleeDPS")) {
        do something...
    }

  * JSON ファイルの読み込み
    dynamic Model.ParseJsonFile(string file)

    JSON ファイルを読み込みます。
    パスは timeline フォルダからの相対パスまたは絶対パスで指定します。

  * Include
    string Model.Include(string file)

    指定したファイルを読み込みその内容を返す。
    パスは timeline フォルダからの相対パスまたは絶対パスで指定します。

  * 環境変数の操作
    1) 環境変数の参照
       model.Var["変数名"]
       で参照できます。

       例)
       if (modeel.Var["TANK_ROLE"] == "MT")
       {
           // Do somthing...
       }

    2) 環境変数の編集
       /// <summary>
       /// 環境変数をセットする
       /// </summary>
       /// <remarks>
       /// 環境変数をセットする。
       /// 通常スコープの場合はゾーンチェンジに消去される。
       /// グローバルスコープの場合はアプリケーションの実行中、常に保持される。</remarks>
       /// <param name="name">変数名</param>
       /// <param name="value">値</param>
       /// <param name="global">グローバルスコープか？</param>
       model.SetVar(string name, object value, bool global = false)

       /// <summary>
       /// 一時変数をセットする
       /// </summary>
       /// <remarks>
       /// タイムラインのリセット時に消去される一時変数をセットする</remarks>
       /// <param name="name">変数名</param>
       /// <param name="value">値</param>
       model.SetTemp(string name, object value)
-->
<!-- ●●この辺は Razor構文（非常に高度な機能）の説明なので読み飛ばして良い●● ↑ここまで -->
<!--
<timeline> タグ
  ルート要素
-->
<timeline>

  <!--
  <name> タグ
    string, 任意項目
    タイムラインを識別するための名前
    オーバーレイや管理画面に表示しタイムラインを識別する
  -->
  <name>スペスペたいむの説明書</name>

  <!--
  <rev>, <description>, <author> タグ
    string, 任意項目
    動作には一切影響がない項目
    ファイルの識別用にリビジョンと詳細説明、作者を記述できる。
    それぞれ設定画面で参照できる。
    作者はイニシャルでも偽名でも何でも良いので何かしら識別できるものを記載することを推奨します。
  -->
  <rev>@rev</rev>
  <description>
    スペスペたいむの定義ファイルの説明書です。
    これ自体をタイムラインとして使用することは出来ません。
    ファイルに書かれたコメントを定義ファイル作成時の参考としてください。
    @sign sigend by Razor
  </description>
  <author>anoyetta</author>

  <!-- コピーライトを明記する場合
  <author>(c)anoyetta</author>
  -->
  <!-- 改変等によって複数人の作者が存在する場合
  <author>
    anoyetta
    Taro Yamada
    Naoki Yoshida
    and my friends...
  </author>
  -->
  <!--
  <license> タグ
    string, 任意項目
    動作には一切影響がない項目
    このファイルのライセンスを記述します。

    特に気にしない場合は
    クリエイティブ・コモンズ 表示 - 継承 非移植
    (CC BY-SA)
    https://creativecommons.org/licenses/by-sa/4.0/deed.ja
    としておくことをおすすめします。
    ・自由に使って良い
    ・改変物を作成、配布した場合でも元の作者をクレジットしなければならない
    ・改変物にもこのライセンスが継承される

    いわゆる完全に著作権フリーとする場合は
    パブリック・ドメイン
    Public Domain
    という扱いになります。この場合もPublic Domainと明記したほうが良いです。
    特に記載がない場合は通常の著作権の適用となるため完全フリーよりも制限が厳しくなります。
  -->
  <!-- クリエイティブ・コモンズ 表示 - 継承 の例 -->
  <license>CC BY-SA</license>

  <!-- パブリック・ドメイン の例 -->
  <!--
  <license>Public Domain</license>
  -->
  <!--
  <zone> タグ
    string, 任意項目
    このタイムラインが自動的にロードされるゾーン名。
    FFXIV_ACT_Pluginが識別する CurrentZoneName と一致させる必要があるため英語で指定する。
    例) 極白虎
    <zone>The Jade Stoa</zone>

    {GLOBAL} と指定した場合は全てのゾーンで動作する。
    ただし、全てのゾーンで動作するのはトリガのみであり、一部のトリガをゾーンに依存せず汎用的に使用するための指定。
  -->
  <zone>{REFERENCE}</zone>

  <!--
  <locale> タグ
    enum, 任意項目
    JA, EN, FR, DE, KO
    このタイムライン定義がどのロケール向けに作られているのかを識別する。
    ゾーンと合わせて自動ロードの条件に含まれる。
    スペスペで設定しているゲームのロケールとタイムラインファイルのロケール、FFXIVプラグインの現在ゾーン名とタイムラインファイルのゾーン
    この両方が一致した場合にタイムラインがロードされる。
  -->
  <locale>JA</locale>

  <!--
  <entry> タグ
    string, 任意項目
    最初にロードするサブルーチンを指定する。
    指定しない場合はtimeline直下の<a>タグを読み込む。
    指定した場合はtimeline直下の<a>タグは無視され、指定されたサブルーチンを初期アクティビティラインとして読み込む。
  -->
  <entry>メインフェーズ</entry>

  <!--
  <start> タグ
    string(RegEx), 任意項目
    通常では「戦闘開始まで5秒前！」を検知してから4.8秒後にタイムラインをスタートする。
    この<start>タグに任意のログを指定するとそのログを検知したときに即時スタートする。
    <start>タグの指定がある場合は前述の「戦闘開始まで5秒前！」による自動スタートは無効になる。
    例) シグマ零式2層
    <start>こいつは久しぶりに良い絵だわい……。 誰にも邪魔はさせんぞ！！</start>
  -->
  <start>オオオオオ……この衝動、もはや止められん！</start>

  <!-- アクティビティ -->
  <a time="00:06" text="風雷波動" notice="次は、風雷波動。" />
  <!--
  <a> タグ
    アクティビティを示すタイムラインの主な定義要素

  name :
    string, 任意項目
    このアクティビティの識別子。gotoやcallで指定するために使用する。

  time :
    TimeSpan, アクティビティの発生時刻を示す。
    mm:ss形式, s形式 どちらで書いてもよい。

  text :
    string, 任意項目
    オーバーレイに表示するアクティビティの表示テキスト。
    textを省略すると同期のみ、通知のみに使用されオーバーレイには表示されない。
    \n で文字列中の改行を示す。

  sync :
    string(RegEx), 任意項目
    タイムラインの時間経過を強制的にこのアクティビティの時刻に合わせるためのログマッチングキーワード。
    ここに指定されたパターンとログがマッチしたときタイムラインの現在時刻をこのアクティビティの時刻に合わせる。
    正規表現が使える。
    スペル・テロップと同様に各種プレースホルダが使用できるが<>をエスケープしなければらないため、プレースホルダを囲む記号を
    [] に置き換えている。
    例)
    <me> は タイムライン定義のsync内で使用する場合は [me] と記述する。

  sync-s :
    double, 任意項目, 既定値-12
    syncマッチングを開始する時間のオフセット秒数。
    このアクティビティの12秒前から同期マッチングを開始する。

  sync-e :
    double, 任意項目, 既定値12
    syncマッチングを終了する時間のオフセット秒数。
    このアクティビティの12秒後まで同期マッチングを継続する。

  goto :
    string, 任意項目
    このアクティビティの時刻が到来したときにここで指定されたnameのアクティビティ、サブルーチンにジャンプする。

  call :
    string, 任意項目
    このアクティビティの時刻が到来したときにここで指定されたnameのサブルーチンをコールする。

  notice :
    string, 任意項目
    このアクティビティの時刻が到来したときに通知を行う。
    waveファイルを指定した場合はwaveを再生する。
    その他の文字列の場合はTTSとして発声する。

  notice-d :
    enum, 任意項目, 既定値Both
    通知を再生するデバイスを指定します。TTSYukkuriでのメインデバイス、サブデバイスの設定に準ずる。
    Both : 普通の設定。デバイスを指定せず、TTSYukkuriでメイン、サブ両方を定義している場合両方で再生する。
    Main : TTSYukkuriで定義されたメインデバイスでのみ再生する。
    Sub  : TTSYukkuriで定義されたサブデバイスでのみ再生する。

  notice-o :
    double, 任意項目, 既定値-6
    通知発生させる時間的オフセット秒数。
    既定値ではアクティビティの時刻が到来する6秒前に通知する。

  notice-vol :
    float, 任意項目, 既定値1.0
    サウンド通知の音量を指定する。0.0（ミュート）～ 1.0 で指定する。

  notice-sync :
    bool, 任意項目, 既定値false
    サウンドを同期再生する。true に指定された通知同士は同時再生されずに順次再生されるようになる。

  style :
    string, 任意項目
    設定UIで定義したStyleを割り当てる。指定しない場合は規定のStyleが割当てられる。

  icon :
    string, 任意項目
    Styleのicon属性を上書きする。
    アイコンのファイル名を指定するとStyle定義よりも優先してこの属性のアイコンを表示する。
    アイコンの表示サイズはStyleのアイコンサイズに依存する。
    例)
    <a time="00:01" text="マーカ" icon="マーカー.png" />

  enabled :
    bool, 任意項目, 既定値true
    このエレメントが有効か無効か。無効な場合はコメントと同じ扱いになる。
  -->
  <!-- トリガ -->
  <t text="天雷掌" sync="白虎は「天雷掌」の構え。" notice="天雷掌" goto="フェーズ1" />
  <!--
  <t> タグ
    タイムラインの実行中に常駐するトリガ。
    通知に使用したりランダムなフェーズ展開を追尾したりという用途で使用する。

  name :
    string, 任意項目
    このトリガの識別子。

  no :
   int, 任意項目, 既定値0
   判定の順序を指定する。複数のトリガは no属性 でソートされた後に判定される。

  text :
    string, 任意項目
    トリガはオーバーレイには表示されないがログには出力される。そのときに出力されるtext
    syncの正規表現パターンによる置換を使用できる。
    \n で文字列中の改行を示す。

  sync :
    string(RegEx)
    このトリガのマッチングパターン

  sync-count :
    int, 任意項目, 既定値0
    何回目のマッチングでこのトリガを実行するか？
    0ならば、毎回のマッチングでトリガを実行する。
    1ならば、1回目のマッチング時のみトリガを実行する。
    2ならば、2回目のマッチング時のみトリガを実行する。
  ...
    という仕組み。

  sync-interval :
    int, 任意項目, 既定値0
    最後マッチしてから次にマッチするまでの秒数を設定する。
    0ならば間隔を考慮せず毎回判定する。

  goto :
    string, 任意項目
    このトリガにマッチしたときにここで指定されたnameのアクティビティ、サブルーチンにジャンプする。

  call :
    string, 任意項目
    このアクティビティの時刻が到来したときにここで指定されたnameのサブルーチンをコールする。

  notice :
    string, 任意項目
    このトリガにマッチしたときに通知を行う。
    waveファイルを指定した場合はwaveを再生する。
    その他の文字列の場合はTTSとして発声する。
    syncの正規表現パターンによる置換を使用できる。

    auto
    notice="auto" と指定すると通知メッセージを自動生成して通知する。
    例)
    <a text="デスセンテンス" notice="auto" notice-o="-6" />
    この場合「デスセンテンス まで、あと6秒。」という通知文を自動生成する。

  notice-d :
    enum, 任意項目, 既定値Both
    通知を再生するデバイスを指定します。TTSYukkuriでのメインデバイス、サブデバイスの設定に準ずる。
    Both : 普通の設定。デバイスを指定せず、TTSYukkuriでメイン、サブ両方を定義している場合両方で再生する。
    Main : TTSYukkuriで定義されたメインデバイスでのみ再生する。
    Sub  : TTSYukkuriで定義されたサブデバイスでのみ再生する。

  notice-vol :
    float, 任意項目, 既定値1.0
    サウンド通知の音量を指定する。0.0（ミュート）～ 1.0 で指定する。

  notice-sync :
    bool, 任意項目, 既定値false
    サウンドを同期再生する。true に指定された通知同士は同時再生されずに順次再生されるようになる。

  exec :
    string, 任意項目, 既定値null
    このトリガにマッチしたときに指定されたパスを起動する。
    実行時の作業フォルダは timeline フォルダとなる。

  args :
    string, 任意項目, 既定値null
    exec で指示されたアプリケーションに渡されるコマンドライン引数を指定する。

  exec-hidden :
    bool, 任意項目, 既定値false
    exec で起動するアプリケーションの Window を非表示にする。
    対象のアプリケーションによっては効かない場合もある。

  enabled :
    bool, 任意項目, 既定値true
    このエレメントが有効か無効か。無効な場合はコメントと同じ扱いになる。
  -->
  <!-- トリガ＋ロード -->
  <t name="to Phase1" sync="オオオオオ……この衝動、もはや止められん！">
    <load target="フェーズ1" truncate="true" />
    <load target="フェーズ2" />
    <load target="最終フェーズ" />
  </t>
  <!--
  <load> タグ
    トリガの子要素として使用する。トリガの条件に合致したときに指定したサブルーチンのアクティビティを
    現在のアクティビティラインの最後尾に追加する。

  target :
    string, 任意項目
    追加するサブルーチンの名前

  truncate :
    bool, 任意項目, 既定値false
    追加するときに現在のアクティビティラインをすべて消去してから追加するか否か。
    消去した場合は強制的に現在のアクティビティが追加されるサブルーチンの冒頭のアクティビティに変わる。

  enabled :
    bool, 任意項目, 既定値true
    このエレメントが有効か無効か。無効な場合はコメントと同じ扱いになる。
  -->
  <!-- トリガ＋v-notice -->
  <t name="to Phase1" sync="オオオオオ……この衝動、もはや止められん！">
    <v-notice text="おおおお！" />
  </t>
  <!--
  <v-notice> タグ
    トリガにヒットしたときに専用のオーバーレイに通知メッセージを表示する。
    アクティビティ（aタグ）配下でも同様に使用できる。

  text :
    string, 任意項目, 既定値{text}
    通知オーバーレイに表示するテキスト。
    {text}を指定すると親トリガのtext属性を参照する。
    {notice}を指定するうと親トリガのnotice属性を参照する。
    \n で文字列中の改行を示す。

  duration :
    int, 任意項目, 既定値3
    通知を表示する時間

  duration-visible :
    bool, 任意項目, 既定値true
    durationを通知オーバーレイに表示するか否か。

  stack-visible :
    bool, 任意項目, 既定値false
    重複ヒット数を通知にオーバーレイに表示するか否か。
    当該通知の表示中に同じテキストの通知の表示条件を満たしたとき stack 数を加算する。
    その stack 数を表示する。

  sync-to-hide :
    string, 任意項目
    このキーワードにマッチしたとき残り時間を無視してこの視覚通知を非表示にする。
    親トリガの正規表現Matchオブジェクトによる置換を使用できる。
    テロップの非表示機能やスペルのマイナス延長と同等の機能。

    ex. シグマ零式3層のエーテルロットの例
    <t text="エーテルロット\n ➜ ${_pc}" sync="[pc]に「エーテルロット」の効果。">
      <v-notice
        duration="15"
        sync-to-hide="${_pc}の「エーテルロット」が切れた。"
        order="-3"
        icon="Virus.png" />
    </t>
    現在エーテルロットを持っている人のカウントのみを視覚通知に表示する。
    エーテルロットが別の人に渡ったときに前の人の効果が切れるためそれを検知して前の人の表示を消す。

  order :
    int, 任意項目, 既定値0
    通知オーバーレイ内の表示順序

  style :
    string, 任意項目
    設定UIで定義したStyleを割り当てる。指定しない場合は規定のStyleが割当てられる。

  icon :
    string, 任意項目
    Styleのicon属性を上書きする。
    アイコンのファイル名を指定するとStyle定義よりも優先してこの属性のアイコンを表示する。
    アイコンの表示サイズはStyleのアイコンサイズに依存する。

  job-icon :
    bool, 任意項目, 既定値false
    Styleのicon属性を上書きし、triggerのキャプチャーグループに含まれるキャラのジョブアイコンを表示する。
    複数キャラをキャプチャーしていた場合は最後のキャラのジョブアイコンを表示する。

  enabled :
    bool, 任意項目, 既定値true
    このエレメントが有効か無効か。無効な場合はコメントと同じ扱いになる。
  -->
  <!-- トリガ＋i-notice -->
  <t name="to Phase1" sync="オオオオオ……この衝動、もはや止められん！">
    <i-notice image="Sample.png"
              duration="5"
              scale="1.0"
              left="500"
              top="100" />
  </t>
  <!--
  <i-notice> タグ
    トリガにヒットしたときに専用のオーバーレイに画像を表示する。
    アクティビティ（aタグ）配下でも同様に使用できる。

  image :
    string, 必須項目
    通知オーバーレイに表示するイメージファイル。
    resources\images 配下のフォルダに配置された png イメージを検索して表示する。
    よってファイル名のみの指定で良い。
    フルパスで指定した場合は前述のフォルダ以外の場所のファイルも表示できる。

  duration :
    int, 任意項目, 既定値5
    通知を表示する時間

  sync-to-hide :
    string, 任意項目
    v-notice タグと同様。

  scale :
    double, 任意項目, 既定値1.0
    画像の拡大率。画像の縮尺／伸尺を変える場合は指定する。

  left :
    int, 任意項目, 既定値-1
    画像の表示位置。left, top ともに指定しない場合はウィンドウ中央に表示される。

  top :
    int, 任意項目, 既定値-1
    画像の表示位置。left, top ともに指定しない場合はウィンドウ中央に表示される。

  enabled :
    bool, 任意項目, 既定値true
    このエレメントが有効か無効か。無効な場合はコメントと同じ扱いになる。
  -->
  <!-- トリガ＋p-sync -->
  <t text="楔がポップ！">
    <p-sync interval="30">
      <combatant name="炎の楔" X="21.5" Y="21.5" Z="0" tolerance="0.01" />
      <combatant name="炎の楔" X="30.0" Y="40.0" Z="0" tolerance="0.01" />
      <combatant name="炎の楔" X="50.0" Y="60.0" Z="0" tolerance="0.01" />
      <combatant name="炎の楔" X="70.0" Y="80.0" Z="0" tolerance="0.01" />
    </p-sync>

    <v-notice duration="5"
              duration-visible="false"
              style="NOTICE_NORMAL"
              icon="Marker.png" />

    <i-notice image="フォーメーションA.png"
              duration="5"
              scale="1.0"
              left="500"
              top="100" />
  </t>
  <!--
  <p-sync> タグ
    トリガの判定を拡張する。
    子要素で定義する combatant の座標をすべて満たしたときにトリガを起動する。
    もっぱらオブジェクトや敵の配置に対して決まった移動やフォーメーションを通知するために使用する。

    p-sync に合致したとき通知用の text 属性を動的に置換する代名詞を使用できる。
    {nameN} : N番目の combatant の実際の名前で置換する。
    {XN}    : N番目の combatant の実際のX座標で置換する。
    {YN}    : N番目の combatant の実際のY座標で置換する。
    {ZN}    : N番目の combatant の実際のZ座標で置換する。

    例)
    <t text="{name1}\nX{X1}\nY{Y1}\nZ{Z1}">
      <p-sync>
        <combatant name="Me Taro" X="21.5" Y="21.5" />
        <combatant name="Warrior Jiro" X="30.5" Y="40.5" />
      </p-sync>

    この場合、text は

    Me Taro
    X21.5
    Y21.5
    Z[実際の値]

    となる。
    * ZはMe Taroが実際にいた場所のZ座標が表示される

  interval :
    double, 任意項目, 既定値30
    最後に合致してから再度判定を行うまでの間隔。

  enabled :
    bool, 任意項目, 既定値true
    このエレメントが有効か無効か。無効な場合はコメントと同じ扱いになる。

  <combatant> タグ
    p-syncの条件となる combatant の座標を定義する。

  name :
    string(RegEx), 必須項目
    対象とする combatant の名前。
    正規表現であるため完全一致で判定する場合は文頭と文末を指定すること。
    例) "^Naoki Yoshida$"

  X, Y, Z :
    float, 任意項目
    combatant の座標。省略した場合は該当の座標軸を判定対象としない。

  tolerance :
    float, 任意項目, 既定値0.01
    座標の判定誤差。座標は完全一致ではなく多少を誤差を許容して判定する。
    その判定誤差を指定する。

  enabled :
    bool, 任意項目, 既定値true
    このエレメントが有効か無効か。無効な場合はコメントと同じ扱いになる。
  -->
  <!-- トリガ＋expressions -->
  <!-- 1回目 横回転の定義 -->
  <t text="横回転" sync="^15:[id8]:ミドガルズオルム:31C7" notice="横回転。">
    <expressions>
      <set name="take1_yoko" value="true" />
    </expressions>
  </t>

  <!-- 2回目 横回転の定義 -->
  <t text="横回転 ➔離れる" sync="^15:[id8]:ミドガルズオルム:31C9" notice="横回転、離れる。">
    <expressions>
      <pre name="take1_yoko" value="true" />
    </expressions>
  </t>

  <!--
  <expressions> タグ
    トリガの判定を拡張する。
    子要素で定義する pre の条件式をすべて満たしたときにトリガを実行する。
    a タグ配下でも使用できるがその場合は set のみ動作する。

  enabled :
    bool, 任意項目, 既定値true
    このエレメントが有効か無効か。無効な場合はコメントと同じ扱いになる。

  <pre> タグ
    条件式

  name :
    string, 必須項目
    変数名

  value :
    object, 任意項目, 既定値true
    変数を判定する期待値。

    ex. <pre name="flag1" value="true"> の場合
    if (flag1 == true)
    {
        トリガを実行する
    }

    ex. <pre name="flag2" value="false"> の場合
    if (flag1 == false)
    {
        トリガを実行する
    }

  count :
    int?, 任意項目, 既定値null
    変数を数値として評価する。一致の場合に真, 不一致の場合に偽 として扱われる。
    value 属性と同時には使用できない。

  <set> タグ
    変数にbool値を格納する

  name :
    string, 必須項目
    変数名

  value :
    object, 任意項目, 既定値true
    変数に格納する値。bool, int, double, string など任意の変数型を使用できる。

  toggle :
    bool, 任意項目, 既定値false
    フラグに対してトグル操作を行う。
    toggle="true" のとき value は無視される。

  count :
    string, 任意項目, 既定値null
    変数をカウンタとして操作する。
    "+1" : 1加算する
    "-1" : 1減算する
    "1"  : 1で初期化する（1を代入する）
    value 属性と同時には使用できない。

  ttl :
    double, 任意項目, 既定値-1 (無限大)
    変数の有効期限、秒数で指定する。
    ttl="30" とした場合、30秒経過後にはこの変数は false として扱われる
    count 属性を使用した場合はTLLの概念は適用されない。

  * 環境変数
    システムが自動的に更新する環境変数を用意しています。
    setタグ によって任意にセットした変数と同様に preタグ の判定で参照することができます。
    使用できる変数は下記の通り。

    IS_TOT_ME   : bool型 Target of Target が自分であるかどうか？
  -->
  <!-- サブルーチン -->
  <s name="メインフェーズ">
    <a time="00:29" text="乾坤一擲" notice="次は、乾坤一擲。" />
    <a time="00:37" text="呪縛雷" notice="次は、呪縛雷。" />
    <a time="00:06" text="風雷波動" notice="次は、風雷波動。" />
    <t sync="Added New Combatant 白帝" goto="フェーズ3" />
  </s>
  <!--
  <s> タグ
    アクティビティのブロックを定義するサブルーチンを定義する。
    s タグの子要素がサブルーチンとして機能する。
    サブルーチン内の時刻はサブルーチンの開始時からのオフセットで定義すること。

  子要素
    <a> : サブルーチン内部のタイムラインを定義する。時間はサブルーチン開始時点からのオフセットで定義する
    <t> : サブルーチン内部でのみ稼働するトリガを定義する。
    <import> : 後述

  name :
    string
    このサブルーチンの名前および識別子。goto, callのターゲットとなる。
    またこのサブルーチンの実行中はオーバーレイに表示される。

  enabled :
    bool, 任意項目, 既定値true
    このエレメントが有効か無効か。無効な場合はコメントと同じ扱いになる。
  -->
  <!-- サブルーチン+import -->
  <s name="トリガ定義">
    <t sync="starts using パンチ" notice="パンチ！" />
    <t sync="starts using キック" notice="キック！" />
  </s>

  <s name="フェーズ2">
    <import source="トリガ定義" />
    <a time="00:15" text="パンチ" notice="次は、パンチ。" />
    <a time="00:21" text="キック" notice="次は、キック。" />
    <a time="00:28" text="アルテマ" notice="次は、アルテマ。" />
  </s>
  <!--
  <import> タグ
    s タグ配下でのみ使用できる。
    source で指定されたサブルーチンからトリガだけをインポートする。

  source :
    string
    トリガのインポート元のサブルーチン名（name）を指定する。

  enabled :
    bool, 任意項目, 既定値true
    このエレメントが有効か無効か。無効な場合はコメントと同じ扱いになる。
  -->
  <!-- デフォルト値設定 -->
  <default target-element="Activity" target-attr="notice-o" value="-3" />
  <!--
  <default> タグ
    各要素, 属性に規定値を設定する。
    無効な要素名, 属性。特にキャストできない型の値を設定した場合はエラーになる。
    ログをよく確認すること。

  target-element :
    enum
    規定値を設定する要素を指定する

    Activity      : a タグ（アクティビティ）に対して適用する
    Trigger       : t タグ（トリガ）に対して適用する
    Subroutine    : s タグ（サブルーチン）に対して適用する
    Load          : load タグ（ロード）に対して適用する
    VisualNotice  : v-notice タグ（視覚通知）に対して適用する
    ImageNotice   : i-notice タグ（画像通知）に対して適用する
    PositionSync  : p-sync タグ（座標トリガ）に対して適用する
    Combatant     : combatant タグ（座標定義）に対して適用する

  target-attr :
    string
    既定値を設定する属性を指定する
    例)
    target-element="Activity"
    target-attr="notice-o"
    value="-3"
    アクティビティの規定の通知時刻オフセットを-3秒にする。

  value :
    object
    設定する既定値。キャストできないとエラーになるので注意すること。
    defaultを使用した場合はロード時にログを確認してエラーがないことを確認するのが望ましい。

  enabled :
    bool, 任意項目, 既定値true
    このエレメントが有効か無効か。無効な場合はコメントと同じ扱いになる。
  -->
</timeline>

<!--
変更履歴

2019-07-24 rev28
  * trigger 再度判定するまでの間隔を指定する属性 sync-interval を追加した

2019-06-05 rev27
  * trigger に外部ツールを起動する属性 exec, args, exec-hidden を追加した

2019-03-22 rev26
  * 環境変数に関する Razor モデルメンバを追加した
  * pre, set タグの value の型を object 型に変更した

2018-10-24 rev25
  * import タグを追加した
  * Razorモデルに Include メソッドを追加した

2018-10-22 rev24
  * a タグ, t タグにサウンド通知の音量を個別に指定できる notice-vol 属性を追加した
    notice-vol="1.0"
    0.0 - 1.0 max, default 1.0
  * a タグ, t タグにサウンドを同期再生する notice-sync 属性を追加した
    notice-sync="true"
    bool, default false

2018-10-06 rev23
  * 環境変数の説明を追加した

2018-10-03 rev22
  * ユーザの拡大、作者の増加に伴って author タグ, license タグを追加した

2018-09-28 rev21
  * set タグ, pre タグ に数値を扱う count 属性を追加した
    set count="+1" で加算, pre count="1" で評価を行う。
  * t タグに判定の順序を規定する no属性 を追加した

2018-09-26 rev20
  * set タグにトグル操作を行う toggle 属性を追加した

2018-09-24 rev19
  * t タグの判定を拡張する expressions タグを追加した
    判定結果をフラグとして変数に格納し後の判定条件として使用できるようにした。

2018-08-08 rev17
  * v-notice にジョブアイコンを自動的に表示する job-icon 属性を追加した
    job-icon="true" で事前の正規表現によるキャプチャーグループ中の最後のキャラのジョブのジョブアイコンを表示する。

2018-07-31 rev16
  * p-sync の combatant の name を単純な完全一致による文字列比較から正規表現に変更した

2018-06-11 rev15
  * t タグの配下に Combatants の座標情報とマッチングする p-sync タグを追加した
  * default タグが対象とするエレメントの説明を追加した

2018-05-24 rev14
  * v-notice タグにスタック数（重複ヒット数）を表示する stack-visible 属性を追加した

2018-05-09 rev13
  * v-notice タグに強制的に非表示にする sync-to-hide 属性を追加した
  * i-notice タグに強制的に非表示にする sync-to-hide 属性を追加した

2018-04-27 rev12
  * a タグ配下で v-notice を使用できるようにした
  * a タグ配下で i-notice を使用できるようにした

2018-04-26 rev11
  * イメージを表示する i-notice タグを t タグの小要素として追加した。

2018-03-17 rev10
  * JSON を読み込むメソッドを追加した
  * Include の説明を削除した
    従来どおり Include は使用できますが、積極的に使うものではなくなったため説明を削除した。

2018-03-13 rev9
  * 各種判定メソッドを用意した。
    InZone, InJob, InRole
  * Include を Razor ネイティブの方式に変えた
  * データモデルへのアクセス例の記述を変えた
    キャストしてからアクセスするようにした。
    以前の書き方でも問題なく動くが dynamic アクセスになるためこちらのほうが早い。

2018-03-12 rev8
  * #define を廃止した
  * 代わりに RazorEngine を搭載した

2018-03-11 rev7
  * <v-notice> に order 属性を追加した
  * #define の説明文を修正した

2018-03-09 rev6
  * #defineプリプロセッサの説明を追加した
  * {GLOBAL}の説明を追加した
-->
